lexer grammar Analexxml;

options {
  k = 10;
   //charVocabulary = ('\3'..'\377') ;
}


//tokens {
//  // tipos
//  INT = 'int' ;
//  CHAR = 'char' ;
//  // instrucciones
//  IF = 'if' ;
//  WHILE = 'while' ;
//  VOID = 'void';
//  LIT_REAL;
//  LIT_ENTERO;
//}


@lexer::header {
   package analexxml;
}

  fragment NUEVA_LINEA: ('\r'? '\n') ;
  fragment LETRA: ('A'..'Z')|('a'..'z');
  fragment DIGITO: '0'..'9';
  fragment COMILLAS : '"';
  
  //MODIFICACION: Hacer que lo leido entre tags sea un conjunto obtenido por una 
  //expreison regular y no especificarlo en concreto
  fragment BARRA: '/';
  fragment TAGOP : '<';
  fragment TAGCL : '>';
  
  BIBLIOP : TAGOP 'b' (options {greedy=false;}:.)* 'a' TAGCL;
  BIBLIOCL : TAGOP BARRA 'b' (options {greedy=false;}:.)* 'a' TAGCL;
  LIBROOP : TAGOP 'l'(options {greedy=false;}:.)* 'o' TAGCL;
  LIBROCL : TAGOP BARRA 'l'(options {greedy=false;}:.)* 'o' TAGCL;
  fragment AUTOP : TAGOP 'a'(options {greedy=false;}:.)* 'r' TAGCL;
  fragment AUTCL : TAGOP BARRA 'a'(options {greedy=false;}:.)* 'r' TAGCL;
  fragment TITUOP : TAGOP 't'(options {greedy=false;}:.)* 'o' TAGCL;
  fragment TITUCL : TAGOP BARRA 't'(options {greedy=false;}:.)* 'o' TAGCL;
  fragment EDITOP : TAGOP 'e'(options {greedy=false;}:.)* 'l' TAGCL;
  fragment EDITCL : TAGOP BARRA 'e'(options {greedy=false;}:.)* 'l' TAGCL;
  
  COMENTARIO: '<!--' (options {greedy=false;}:.)* '-->' {$channel=HIDDEN;};
  TITULO : TITUOP (options {greedy=false;}:.)* TITUCL;
  AUTOR : AUTOP (options {greedy=false;}:.)* AUTCL;
  EDITORIAL : EDITOP (options {greedy=false;}:.)* EDITCL;
  BLANCO: (' '|'\t'|NUEVA_LINEA) {$channel=HIDDEN;}
  
;
  